{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "bbb608fe-860c-423a-8c4d-490c4c5ad953",
   "metadata": {},
   "source": [
    "Chapter 26\n",
    "# 可视化成对距离矩阵下三角部分 (不含主对角线元素)\n",
    "Book_1《编程不难》 | 鸢尾花书：从加减乘除到机器学习  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "c6b318bd-a97f-4847-958d-c8d60d557032",
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import seaborn as sns\n",
    "import string\n",
    "from scipy.spatial import distance_matrix"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "ad1be4c8-6c8f-4600-8966-f72178d10f7f",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 产生随机数\n",
    "num = 26\n",
    "np.random.seed(0)\n",
    "data = np.random.randint(10 + 1, size=(num, 2))\n",
    "labels = list(string.ascii_uppercase)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "6f9f8e00-7d3b-4909-af3e-f9d230517081",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 计算成对距离矩阵\n",
    "pairwise_ds = distance_matrix(data, data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "0f94a68c-9478-4845-af50-ddf8cac6c45a",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 产生蒙皮/面具\n",
    "mask = np.triu(np.ones_like(pairwise_ds, dtype=bool))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "e98bfcea-02ae-4042-917d-d6e5c9e2603b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<AxesSubplot:>"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots()\n",
    "sns.heatmap(pairwise_ds, \n",
    "            mask = mask,\n",
    "            cmap = 'RdYlBu_r', \n",
    "            square = True, \n",
    "            xticklabels = labels,\n",
    "            yticklabels = labels,\n",
    "            ax = ax)\n",
    "# fig.savefig('下三角.svg', format='svg')"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
